/**
 * Copyright (c) 2010 David Hamrick, Guy Kopsombut, Emily Ross 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 *Creates a user dictionary and has JSON instructions to input code online
 *
 * @author David Hamrick, Guy Kopsombut, Emily Ross
 *
 */

#import "User.h"
#import "JSON.h"


@implementation User

@synthesize storedDict,userDict,assignedPassenger,passengerData,transmit,locationAvailable,passengerAssigned,assignedPassengerStatus;

/**
 *
 */
+ (User*)Inst
{
	static User* sharedInstance;
	
	@synchronized(self)
	{
		if(!sharedInstance)
		{
			sharedInstance = [[User alloc] init];
		}
	}
	return sharedInstance;
}

- (id)init
{
	storedDict = [[NSMutableDictionary alloc] init];
	userDict = [[NSMutableDictionary alloc] init];
	assignedPassenger = [[NSMutableDictionary alloc] init];
	passengerData = [[NSMutableArray alloc] init];
	
	
	timer = [NSTimer scheduledTimerWithTimeInterval:2
														  target:self selector:@selector(timerDone) userInfo:nil repeats:YES];
	return self;
}

- (id)copyWithZone:(NSZone *)zone
{
	return self;
}

- (id)retain
{
	return self;
}

- (unsigned)retainCount
{
	//denotes an object that cannot be released
	return UINT_MAX;
}

- (void)release
{
	//do nothing
}

- (id)autorelease
{
	return self;
}


/*
 * Used to store data online with JSON
 */
- (void)timerDone
{
	SBJSON* json = [[[SBJSON alloc] init] autorelease];
	NSString* jsonStr = [json stringWithObject:userDict];
	
	if(transmit && locationAvailable)
	{
		NSURL* url = [NSURL URLWithString:@"http://sunna-server.appspot.com/cabs/1"];
		//NSURL* url = [NSURL URLWithString:@"http://localhost:8081/cabs/1"];
		NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url];
		[urlRequest setHTTPMethod:@"POST"];
		NSData* bodyData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
		[urlRequest setHTTPBody:bodyData];
		NSURLResponse* urlResponse;
		NSError* urlError;
		NSData* responseData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&urlError];
		NSString* responseString = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];
		NSLog(@"Response = %@",responseString);
	}

	
	NSURL* passengerURL = [NSURL URLWithString:@"http://sunna-server.appspot.com/passengers"];
	NSString* passengerStr = [NSString stringWithContentsOfURL:passengerURL];
	NSMutableArray* newPassengerData = [[NSMutableArray alloc] init];
	newPassengerData = [[json objectWithString:passengerStr] retain];
	if([newPassengerData count] != [passengerData count])
	{
		passengerData = newPassengerData;
		UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"New Fares Available"
																			 message:nil
																			delegate:self
																cancelButtonTitle:@"Cancel" 
																otherButtonTitles:@"Ok",nil];
		[alertView show];
		[[NSNotificationCenter defaultCenter] postNotificationName:@"NewPassengers" object:nil];
	}
}


@end
